// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QIcon>
#include "globalTable.hpp"

#include "src/nlohmannjson.hpp"
#include "src/QtTcp/xdgTcpClient.h"
#include "src/controlClass/GaugeCloud.h"
#include "src/videoCodec/PacketBlob.hpp"
#include "src/videoCodec/VideoDecoder.hpp"
#include "src/videoCodec/QtVideoStreamParser.hpp" // 做视频解析

#include "src/vlc/xdgvlc.h"


#include <QTreeWidgetItem>

namespace Ui { class MainWindow; }

class MainWindow : public QWidget
{
    Q_OBJECT
public:
    explicit MainWindow(xdgTcpClient* client, QWidget* parent = nullptr);
    ~MainWindow();

private:
    void setTreeWidgetData();
    void insertMsg(const QString &message);

private slots:
    // === 回调槽：复用同一条TCP连接的信号 ===
    void onClientConnected();  // 用户tcp连接
    void onClientDisconnected();  // 用户tcp断开
    void onMessageReceived(const QByteArray& message);  // 用户tcp数据到达
    void onErrorOccurred(QAbstractSocket::SocketError err);  // 用户tcp出错

    void on_deviceTreeWidget_itemClicked(QTreeWidgetItem *item, int column); // 设备列表被单击（播放视频）
    void ptzControl(int position, const QString &name); // 云台控制


private:
    Ui::MainWindow *ui;
    xdgTcpClient* m_client = nullptr;  // <--- 保存指向同一条连接的指针

    xdgVLC *m_playerCore;        // 播放器核心

    bool m_Channel_1_isPlay;

    QImage m_lastFrame;          // 保存最后一帧，便于缩放重绘

    QThread* m_ioThread = nullptr;        // I/O 线程：跑 m_videoClient
    QThread* m_decodeThread = nullptr;    // 解码线程：跑 m_parser
    xdgTcpClient* m_videoClient = nullptr; // 注意：无 parent
    xclient::VideoStreamParser* m_parser = nullptr; // 注意：无 parent


};

#endif // MAINWINDOW_H
